home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 August / SGI Freeware 1999 August.iso / dist / fw_gimp.idb / usr / freeware / share / gimp / scripts / carve-it.scm.z / carve-it.scm
Encoding:
GIMP Script-Fu Script  |  1999-07-21  |  7.2 KB  |  190 lines

  1. ;  CARVE-IT
  2. ;   Carving, embossing, & stamping
  3. ;   Process taken from "The Photoshop 3 WOW! Book"
  4. ;   http://www.peachpit.com
  5. ;   This script requires a grayscale image containing a single layer.
  6. ;   This layer is used as the mask for the carving effect
  7. ;   NOTE: This script requires the image to be carved to either be an
  8. ;   RGB colour or grayscale image with a single layer. An indexed file
  9. ;   can not be used due to the use of gimp-histogram and gimp-levels.
  10.  
  11.  
  12. (define (carve-brush brush-size)
  13.   (cond ((<= brush-size 5) "Circle (05)")
  14.     ((<= brush-size 7) "Circle (07)")
  15.     ((<= brush-size 9) "Circle (09)")
  16.     ((<= brush-size 11) "Circle (11)")
  17.     ((<= brush-size 13) "Circle (13)")
  18.     ((<= brush-size 15) "Circle (15)")
  19.     ((<= brush-size 17) "Circle (17)")
  20.     (else "Circle (19)")))
  21.  
  22. (define (carve-scale val scale)
  23.   (* (sqrt val) scale))
  24.  
  25. (define (calculate-inset-gamma img layer)
  26.   (let* ((stats (gimp-histogram img layer 0 0 255))
  27.      (mean (car stats)))
  28.     (cond ((< mean 127) (+ 1.0 (* 0.5 (/ (- 127 mean) 127.0))))
  29.       ((>= mean 127) (- 1.0 (* 0.5 (/ (- mean 127) 127.0)))))))
  30.  
  31.  
  32. (define (copy-layer-carve-it dest-image dest-drawable source-image source-drawable)
  33.   (gimp-selection-all dest-image)
  34.   (gimp-edit-clear dest-image dest-drawable)
  35.   (gimp-selection-none dest-image)
  36.   (gimp-selection-all source-image)
  37.   (gimp-edit-copy source-image source-drawable)
  38.       (let ((floating-sel (car (gimp-edit-paste dest-image dest-drawable FALSE))))
  39.     (gimp-floating-sel-anchor floating-sel)))
  40.  
  41.  
  42.  
  43. (define (script-fu-carve-it mask-img mask-drawable bg-layer carve-white)
  44.   (let* ((width (car (gimp-drawable-width mask-drawable)))
  45.      (height (car (gimp-drawable-height mask-drawable)))
  46.      (type (car (gimp-drawable-type bg-layer)))
  47.      (img (car (gimp-image-new width height (cond ((= type RGB_IMAGE) RGB)
  48.                               ((= type RGBA_IMAGE) RGB)
  49.                               ((= type GRAY_IMAGE) GRAY)
  50.                               ((= type GRAYA_IMAGE) GRAY)
  51.                               ((= type INDEXED_IMAGE) INDEXED)
  52.                               ((= type INDEXEDA_IMAGE) INDEXED)))))
  53.      (size (min width height))
  54.      (offx (carve-scale size 0.33))
  55.      (offy (carve-scale size 0.25))
  56.      (feather (carve-scale size 0.3))
  57.      (brush-size (carve-scale size 0.3))
  58.      (mask-fs 0)
  59.      (mask (car (gimp-channel-new img width height "Engraving Mask" 50 '(0 0 0))))
  60.      (inset-gamma (calculate-inset-gamma (car (gimp-drawable-image bg-layer)) bg-layer))
  61.      (mask-fat 0)
  62.      (mask-emboss 0)
  63.      (mask-highlight 0)
  64.      (mask-shadow 0)
  65.      (shadow-layer 0)
  66.      (highlight-layer 0)
  67.      (cast-shadow-layer 0)
  68.      (csl-mask 0)
  69.      (inset-layer 0)
  70.      (il-mask 0)
  71.      (bg-width (car (gimp-drawable-width bg-layer)))
  72.      (bg-height (car (gimp-drawable-height bg-layer)))
  73.      (bg-type (car (gimp-drawable-type bg-layer)))
  74.      (bg-image (car (gimp-drawable-image bg-layer)))
  75.      (layer1 (car (gimp-layer-new img bg-width bg-height bg-type "Layer1" 100 NORMAL)))
  76.      (inset-layer (car (gimp-layer-new img bg-width bg-height bg-type "inset1" 100 NORMAL)))
  77.       (old-fg (car (gimp-palette-get-foreground)))
  78.      (old-bg (car (gimp-palette-get-background)))
  79.      (old-brush (car (gimp-brushes-get-brush))))
  80.     (gimp-image-disable-undo img)
  81.     (gimp-selection-all img)
  82.     (gimp-edit-clear img inset-layer)
  83.     (gimp-edit-clear img layer1)
  84.     (gimp-selection-none img)
  85.     (copy-layer-carve-it img layer1 bg-image bg-layer)
  86.  
  87.     (gimp-edit-clear img inset-layer)
  88.  
  89.     (gimp-edit-copy mask-img mask-drawable)
  90.     (gimp-image-add-channel img mask 0)
  91.  
  92.     (gimp-image-add-layer img layer1 0)
  93.     (plug-in-tile 1 img layer1 width height FALSE)
  94.     (set! mask-fs (car (gimp-edit-paste img mask FALSE)))
  95.     (gimp-floating-sel-anchor mask-fs)
  96.     (if (= carve-white FALSE)
  97.     (gimp-invert img mask))
  98.  
  99.     (set! mask-fat (car (gimp-channel-copy mask)))
  100.     (gimp-image-add-channel img mask-fat 0)
  101.     (gimp-selection-load img mask-fat)
  102.     (gimp-brushes-set-brush (carve-brush brush-size))
  103.     (gimp-palette-set-foreground '(255 255 255))
  104.     (gimp-edit-stroke img mask-fat)
  105.     (gimp-selection-none img)
  106.  
  107.     (set! mask-emboss (car (gimp-channel-copy mask-fat)))
  108.     (gimp-image-add-channel img mask-emboss 0)
  109.     (plug-in-gauss-rle 1 img mask-emboss feather TRUE TRUE)
  110.     (plug-in-emboss 1 img mask-emboss 315.0 45.0 7 TRUE)
  111.  
  112.     (gimp-palette-set-background '(180 180 180))
  113.     (gimp-selection-load img mask-fat)
  114.     (gimp-selection-invert img)
  115.     (gimp-edit-fill img mask-emboss)
  116.     (gimp-selection-load img mask)
  117.     (gimp-edit-fill img mask-emboss)
  118.     (gimp-selection-none img)
  119.  
  120.     (set! mask-highlight (car (gimp-channel-copy mask-emboss)))
  121.     (gimp-image-add-channel img mask-highlight 0)
  122.     (gimp-levels img mask-highlight 0 180 255 1.0 0 255)
  123.  
  124.     (set! mask-shadow mask-emboss)
  125.     (gimp-levels img mask-shadow 0 0 180 1.0 0 255)
  126.  
  127.     (gimp-edit-copy img mask-shadow)
  128.     (set! shadow-layer (car (gimp-edit-paste img layer1 FALSE)))
  129.     (gimp-floating-sel-to-layer shadow-layer)
  130.     (gimp-layer-set-mode shadow-layer MULTIPLY)
  131.  
  132.     (gimp-edit-copy img mask-highlight)
  133.     (set! highlight-layer (car (gimp-edit-paste img shadow-layer FALSE)))
  134.     (gimp-floating-sel-to-layer highlight-layer)
  135.     (gimp-layer-set-mode highlight-layer SCREEN)
  136.  
  137.     (gimp-edit-copy img mask)
  138.     (set! cast-shadow-layer (car (gimp-edit-paste img highlight-layer FALSE)))
  139.     (gimp-floating-sel-to-layer cast-shadow-layer)
  140.     (gimp-layer-set-mode cast-shadow-layer MULTIPLY)
  141.     (gimp-layer-set-opacity cast-shadow-layer 75)
  142.     (plug-in-gauss-rle 1 img cast-shadow-layer feather TRUE TRUE)
  143.     (gimp-layer-translate cast-shadow-layer offx offy)
  144.  
  145.     (set! csl-mask (car (gimp-layer-create-mask cast-shadow-layer BLACK-MASK)))
  146.     (gimp-image-add-layer-mask img cast-shadow-layer csl-mask)
  147.     (gimp-selection-load img mask)
  148.     (gimp-palette-set-background '(255 255 255))
  149.     (gimp-edit-fill img csl-mask)
  150.  
  151.    (set! inset-layer (car (gimp-layer-copy layer1 TRUE)))
  152.    (gimp-image-add-layer img inset-layer 1)
  153.  
  154.     (set! il-mask (car (gimp-layer-create-mask inset-layer BLACK-MASK)))
  155.     (gimp-image-add-layer-mask img inset-layer il-mask)
  156.     (gimp-selection-load img mask)
  157.     (gimp-palette-set-background '(255 255 255))
  158.     (gimp-edit-fill img il-mask)
  159.     (gimp-selection-none img)
  160.     (gimp-selection-none bg-image)
  161.     (gimp-levels img inset-layer 0 0 255 inset-gamma 0 255)
  162.     (gimp-image-remove-channel img mask)
  163.     (gimp-image-remove-channel img mask-fat)
  164.     (gimp-image-remove-channel img mask-highlight)
  165.     (gimp-image-remove-channel img mask-shadow)
  166.  
  167.     (gimp-layer-set-name layer1 "Carved Surface")
  168.     (gimp-layer-set-name shadow-layer "Bevel Shadow")
  169.     (gimp-layer-set-name highlight-layer "Bevel Highlight")
  170.     (gimp-layer-set-name cast-shadow-layer "Cast Shadow")
  171.     (gimp-layer-set-name inset-layer "Inset")
  172.  
  173.     (gimp-palette-set-foreground old-fg)
  174.     (gimp-palette-set-background old-bg)
  175.     (gimp-brushes-set-brush old-brush)
  176.     (gimp-display-new img)
  177.     (gimp-image-enable-undo img)))
  178.  
  179. (script-fu-register "script-fu-carve-it"
  180.             "<Image>/Script-Fu/Stencil Ops/Carve-It"
  181.             "Use the specified [GRAY] drawable as a stencil to carve from the specified image. The specified image must be either RGB colour or grayscale, not indexed."
  182.             "Spencer Kimball"
  183.             "Spencer Kimball"
  184.             "1997"
  185.             "GRAY"
  186.             SF-IMAGE "Mask Image" 0
  187.             SF-DRAWABLE "Mask Drawable" 0
  188.             SF-DRAWABLE "Image to Carve" 0
  189.             SF-TOGGLE "Carve White Areas" TRUE)
  190.